class: center, middle, inverse, title-slide .title[ # Advanced quantitative methods øvelsestime uge 2 ] .author[ ### Rasmus Klokker ] --- <style type="text/css"> .strike { text-decoration: line-through } </style> <style type="text/css"> .watch-out { background-color: lightpink; border: 3px solid red; font-weight: bold; } </style> class: center, middle # Spørgsmål til undervisningen? --- # Korrelation .left-column[ ## Hvad er en korrelation? Et mål for den _lineære_ sammenhæng mellem to _kontinuerte_ variable ] .right-column[ <img src="data:image/png;base64,#Week_2_slides_files/figure-html/cor_sim-1.png" width="500px" /> ] --- #Korrelation med binære variable? | | gammel| ung| |:------|------:|---:| |fattig | 81| 432| |rig | 211| 276| --- # Det virker men... .pull-left[ ````r cor(wealth, age) ```` 0.3027136 ] -- .pull-right[  ] --- ## Korrelation fortolkning Angiver _styrken_ af sammenhængen og til dels retningen en _positiv korrelation_ angiver at to variable "følger hinanden" - når den ene variabel stiger i værdi, så stiger den anden også i værdi. - Når den ene variabel falder i færdi, så falder den anden variabel også i værdi - Eksempel - Sammenhængen mellem fravær i skolen og karakter: Når du kommer til flere timer får du højere karakterer, når du kommer til færre timer får du lavere karakterer -- En _negativ korrelation_ betyder at variablene "går den modsatte vej" - når den ene variabel stiger i værdi, så falder den anden i værdi. - når den ene variabel falder i værdi, så stiger den anden i værdi. - Eksempel - Sammenhængen mellem træning og besøg hos lægen: Når du træner mere, har du færre besøg hos lægen. Når du træner mindre har du flere besøg hos lægen --- #Hvad kan vi sige udover det? Er en `\(r\)` på 0,5 meget eller lidt? Hvis vi eksempelvis finder en korrelation mellem fravær og karakterer på 0,5, så kan vi nok sige at det er en ret stærk sammenhæng. Men hvad mere end det? Vi bliver nødt til at have en slags referenceramme Regressionskoefficienter meget mere præcise at fortolke på, og, i mange tilfælde, lettere at forholde sig til. Det betyder ikke at korrelationer ikke er anvendelige - korrelationsmatricer - standardiseret mål --- ## Game time http://guessthecorrelation.com/ --- # Regression ## Hvad er regression? En metode til at estimere en linæer sammenhæng mellem to variable ## Hvordan fortolker man beta-koefficient? `\(y=\beta_0+\beta X_{1i}+\epsilon_i\)` -- Eksempel -- `\(karaktergennemsnit=\beta_0+\beta_1fravær_{1i}+\epsilon_i\)` `\(karaktergennemsnit=20+-0,2 fravær_{1i}+\epsilon_i\)` --- ## Hvordan fortolker man beta-koefficient? `\(karaktergennemsnit=\beta_0+\beta_1fravær_{1i}+\epsilon_i\)` -- `\(karaktergennemsnit=20+-0,2 fravær_{1i}+\epsilon_i\)` Hvis vi måler fravær i procent, kan vi fortolke `\(\beta_1\)`, som her er -0,2, således: **En enhedsændrings for fravær medfører en ændring i karaktergennemsnit på -0,2 karakterpoint** = **Hvis vi øger fravær med 1% bliver karaktergennemsnit 0,2 karakterpoint mindre** --- # Fortolkning step by step 1. Hvad er din afhængige variabel = **Variabel afhængig** I eksemplet var det _karaktergennemsnit_ 2. Hvilken enhed er din afhængige variabel målt i = **Enhed_afhængig** I eksemplet er den afhængige variabel karaktergennemsnit som er målt i _karakterpoint_ 3. Hvad er din uafhængige variabel = **Variabel uafhængig** I eksemplet var det _fravær_ 4. Hvilken enhed er din uafhængige variabel målt i = **Enhed_uafhængig** I eksemplet er den uafhængige variabel fravær, som er målt i _procent_ 5. Hvad er regressions/beta-koefficienten for den uafhængige variabel = **beta-koefficient** I eksemplet var den -0,2 6. Du sætter **Variabel afhængig**, **Enhed_afhængig**, **Variabel uafhængig**, **Enhed_uafhængig** og **beta-koefficient** ind i sætningen: .center["Hvis vi øger **Variabel_uafhængig** med en **Enhed_uafhængig** giver det en ændring i **beta-koefficient** **Enhed_afhængig** for den afhængige variabel **Variabel afhængig**"] --- .pull-left[ **Variabel afhængig** = _karaktergennemsnit_ **Enhed_afhængig** = _karakterpoint_ **Variabel uafhængig** = _fravær_ **Enhed_uafhængig** = _procent_ **beta-koefficient** = -0,2 ] .pull.right[ "Hvis vi øger **Variabel_uafhængig** med en **Enhed_uafhængig** giver det en ændring i **beta-koefficient** **Enhed_afhængig** for den afhængige variabel **Variabel afhængig**" ] --- .pull-left[ **Variabel afhængig** = _karaktergennemsnit_ **Enhed_afhængig** = _karakterpoint_ **Variabel uafhængig** = _fravær_ **Enhed_uafhængig** = _procent_ **beta-koefficient** = -0,2 ] .pull.right[ "Hvis vi øger _fravær_ med en **Enhed_uafhængig** giver det en ændring i **beta-koefficient** **Enhed_afhængig** for den afhængige variabel **Variabel afhængig**" ] --- .pull-left[ **Variabel afhængig** = _karaktergennemsnit_ **Enhed_afhængig** = _karakterpoint_ **Variabel uafhængig** = _fravær_ **Enhed_uafhængig** = _procent_ **beta-koefficient** = -0,2 ] .pull.right[ "Hvis vi øger _fravær_ med en _procent_ giver det en ændring i **beta-koefficient** **Enhed_afhængig** for den afhængige variabel **Variabel afhængig**" ] --- .pull-left[ **Variabel afhængig** = _karaktergennemsnit_ **Enhed_afhængig** = _karakterpoint_ **Variabel uafhængig** = _fravær_ **Enhed_uafhængig** = _procent_ **beta-koefficient** = -0,2 ] .pull.right[ "Hvis vi øger _fravær_ med en _procent_ giver det en ændring i -0,2 **Enhed_afhængig** for den afhængige variabel **Variabel afhængig**" ] --- .pull-left[ **Variabel afhængig** = _karaktergennemsnit_ **Enhed_afhængig** = _karakterpoint_ **Variabel uafhængig** = _fravær_ **Enhed_uafhængig** = _procent_ **beta-koefficient** = -0,2 ] .pull.right[ "Hvis vi øger _fravær_ med en _procent_ giver det en ændring i -0,2 _karakterpoint_ for den afhængige variabel **Variabel afhængig**" ] --- .pull-left[ **Variabel afhængig** = _karaktergennemsnit_ **Enhed_afhængig** = _karakterpoint_ **Variabel uafhængig** = _fravær_ **Enhed_uafhængig** = _procent_ **beta-koefficient** = -0,2 ] .pull.right[ "Hvis vi øger _fravær_ med en _procent_ giver det en ændring i -0,2 _karakterpoint_ for den afhængige variabel _karaktergennemsnit_" ] --- ## Hvordan fortolker man output i R <iframe src="C:/Users/B059064/Desktop/PHD/teaching/summary.htm" width="100%" height="400px" data-external="1"></iframe> --- ## residualer residualer er _forskellen mellem de forudsagte værdier og de værdier vi faktisk observerer_ I vores eksempel er de forudsagte værdier således de værdier for karaktergennemsnit vi får ud, når vi sætter en værdi for "fravaer" ind i vores regressionmodel --- Lad os tage et eksempel en studerende har et karaktergennemsnit på 32 og en fraværsprocent på 15. Hvis vi sætter værdien for fravær ind i vores model så får vi `$$karakter=\beta_0+\beta_1fravaer$$` -> `$$karakter=19.88+-0.2*15$$` -> `$$16.92=19.88+-0.2*15$$` --- Ifølge modellen skulle eleven altså have klaret sig væsentligt dårligere end det faktisk var tilfældet. Hvad er residualet? `\(karakter_{forudsagt}-karakter_{observeret}=16.92-32=8.72\)` ## Hvad er residualerne for de førster 10 observationer? | karakter| predicted| predicted-karakter| (predicted-karakter)^2| |---------:|---------:|------------------:|----------------------:| | 20.215958| 17.121392| -3.0945662| 9.5763399| | 9.299851| 9.409501| 0.1096495| 0.0120230| | 15.094293| 14.026033| -1.0682603| 1.1411800| | 10.491167| 12.686568| 2.1954009| 4.8197850| | 7.388850| 7.972200| 0.5833496| 0.3402968| | 11.782134| 15.140654| 3.3585204| 11.2796590| | 6.503513| 5.673838| -0.8296749| 0.6883604| | 6.899876| 6.259320| -0.6405553| 0.4103111| | 9.767687| 7.598816| -2.1688709| 4.7040008| | 4.091169| 5.646177| 1.5550071| 2.4180472| --- ### Linien der bedst passer på data ### Hvordan finder man den bedste linie? Ved at finde de regressionskoefficienter der giver den mindste, kvadrerede, sum af residualer Med andre ord, finder vi den `\(\beta_0\)` og den `\(beta_1\)` værdi der gør, at `\(\Sigma(karakter_{forudsagt}-karakter_{observeret})^2\)` er mindst mulig! --- ### Hvad er RSS i vores eksempel .pull-left[ ``` ## (17.12 - 20.22)^2+ ## (9.41 - 9.3)^2+ ## (14.03 - 15.09)^2+ ## (12.69 - 10.49)^2+ ## (7.97 - 7.39)^2+ ## (15.14 - 11.78)^2+ ## (5.67 - 6.5)^2+ ## (6.26 - 6.9)^2+ ## (7.6 - 9.77)^2+ ## (5.65 - 4.09)^2 ``` ``` ## (-3.09)^2+ ## (0.11)^2+ ## (-1.07)^2+ ## (2.2)^2+ ## (0.58)^2+ ## (3.36)^2+ ## (-0.83)^2+ ## (-0.64)^2+ ## (-2.17)^2+ ## (1.56)^2 ``` ] -- .pull-right[ ``` ## 9.60999999999999+ ## 0.0120999999999999+ ## 1.1236+ ## 4.84+ ## 0.3364+ ## 11.2896+ ## 0.6889+ ## 0.409600000000001+ ## 4.7089+ ## 2.4336 ``` ``` ## RSS=35.39 ``` ] --- ### Hvad nu hvis vi havde valgt nogle andre koefficienter? Er vi nu sikre på, at de koefficienter som R har spyttet ud er dem der minimerer RSS, dvs. er dem der giver den linie der bedst passer på data? Vi kan hurtigt prøve at se hvad der sker med RSS, hvis vi nu prøver at indsætte nogle andre `\(\beta_0\)` og `\(\beta_1\)` værdier Hvad hvis vi `\(beta_0\)` var 25 og `\(beta_1\)` var 0,1? ```r fitted.fake <- 25+0.1*df$fravaer[1:10] rss.fake <- sum((fitted.fake-df$karakter[1:10])^2) rss.fake ``` ``` ## [1] 4269.014 ``` Ok det var tydeligvis ikke et valg af værdier der var bedre end dem vi fik fra R Hvad nu hvis vi prøver nogle andre værdier...MANGE andre værdider Hvad med.... --- 16.000 forskellige værdier! ```r combs <- expand.grid(intercept=seq(0,40,.5), beta_1=seq(-0,-10,-.05)) #lav alle kombinationer af forskellige værdier for intercept og beta_1 fit.loop <- lapply(1:nrow(combs), function(x){ #kør en løkke på tværs af sekvensen 1,2,3,4,....antal rækker i "combs" cat("iter", x, "\r") #vælg værdien fra variablen "intercept" i række x og værdier fra variablen beta_1 i række x #sæt værdierne ind i vores regressionsligning, dvs. intercept-værdi+beta_værdi*fravaer #her vælger vi de første 10 værdier af "fravaer" #resultatet er de forudsagte værdier for "karakter", som her er navngivet "karakter.predicted" karakter.predicted <- combs$intercept[x]+combs$beta_1[x]*df$fravaer[1:10] #udregn RSS. "df$karakter[1:10]" er de første 10 værdier af "karakter" som vi faktisk har observeret rss.fake <- sum((karakter.predicted-df$karakter[1:10])^2) #saml resultaterne i en data.frame res.df <- data.frame(intercept=combs$intercept[x], beta_1=combs$beta_1[x], rss=rss.fake) }) #Lapply spytter en list med hver enkelt data.frame ud(dvs. ca 40.000 data.frames). Vi ville hellere have een stor data.frame #med alle resultaterne samlet. Derfor sætter vi alle de enkelte data.frames sammen nedenfor. Funtkionen "rbind" sætter data.frames sammen #rækkevis, dvs. at "rbind" stabler to data.frames "oven på" hinanden ligesom at stable byggeklodser. "rbind" virker KUN hvis de to data.frames har #de samme kolonner fits.df <- do.call("rbind", fit.loop) #vi beregner rangeringen af de forskellige RSS værdier, dvs. den laveste RSS værdi er "på førstepladsen" og har derfor en rangering på 1 #den næsthøjeste RSS værdi har en rangering på 2 osv. fits.df$rank <- rank(fits.df$rss) #det tog lidt tid at køre den løkke så lad os gemme data write.csv(fits.df, file="resi_loop.csv") ``` --- --- # Break 15 mins!  --- # Gennemgang af online øvelse --- # Øvelse med nye data hvis der er tid --- #Ordbog med begreber og R kommandoer google sheet/doc med forslag --- # Vi ses næste uge!! ## Office hours 16.2.18, mandag-torsdag 13-15 rhk@vive.dk rhk@soc.ku.dk